package org.andengine.opengl.texture;

import android.opengl.GLES20;

/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga Inc.
 *
 * @author Nicolas Gramlich
 * @since 14:55:02 - 08.03.2010
 */
public enum PixelFormat {
    // ===========================================================
    // Elements
    // ===========================================================

    UNDEFINED(-1, -1, -1, -1),
    RGBA_4444(GLES20.GL_RGBA, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_SHORT_4_4_4_4, 16),
    RGBA_5551(GLES20.GL_RGB, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_SHORT_5_5_5_1, 16),
    RGBA_8888(GLES20.GL_RGBA, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, 32),
    RGB_565(GLES20.GL_RGB, GLES20.GL_RGB, GLES20.GL_UNSIGNED_SHORT_5_6_5, 16),
    A_8(GLES20.GL_ALPHA, GLES20.GL_ALPHA, GLES20.GL_UNSIGNED_BYTE, 8),
    I_8(GLES20.GL_LUMINANCE, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, 8),
    AI_88(GLES20.GL_LUMINANCE_ALPHA, GLES20.GL_LUMINANCE_ALPHA, GLES20.GL_UNSIGNED_BYTE, 16);

    // ===========================================================
    // Constants
    // ===========================================================

    // ===========================================================
    // Fields
    // ===========================================================

    private final int mGLInternalFormat;
    private final int mGLFormat;
    private final int mGLType;
    private final int mBitsPerPixel;

    // ===========================================================
    // Constructors
    // ===========================================================

    private PixelFormat(final int pGLInternalFormat, final int pGLFormat, final int pGLType, final int pBitsPerPixel) {
        this.mGLInternalFormat = pGLInternalFormat;
        this.mGLFormat = pGLFormat;
        this.mGLType = pGLType;
        this.mBitsPerPixel = pBitsPerPixel;
    }

    // ===========================================================
    // Getter & Setter
    // ===========================================================

    public int getGLInternalFormat() {
        return this.mGLInternalFormat;
    }

    public int getGLFormat() {
        return this.mGLFormat;
    }

    public int getGLType() {
        return this.mGLType;
    }

    public int getBitsPerPixel() {
        return this.mBitsPerPixel;
    }

    // ===========================================================
    // Methods from SuperClass/Interfaces
    // ===========================================================

    // ===========================================================
    // Methods
    // ===========================================================

    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}